package com.wanwu.channel.converter;

import com.wanwu.channel.common.enums.AlipayAppTradeStatusEnums;
import com.wanwu.channel.common.enums.ChannelPayStatus;
import org.apache.commons.lang3.StringUtils;

/**
 * @ClassName PayStatusConvert
 * @Description 三方支付支付单状态转渠道本地状态
 * @Author husheng
 * @Date 2020-01-17 10:16
 */
public class PayStatusConvert {

    /**
     * 支付宝订单状态转本地
     * @param alipayStatus
     * @return
     */
    public static ChannelPayStatus alipayConvert(String alipayStatus){
        ChannelPayStatus payStatus;
        // 判断支付宝返回的状态和数据库里的状态有区别没
        if (AlipayAppTradeStatusEnums.TRADE_FINISHED.getCode().equals(alipayStatus) ||
                AlipayAppTradeStatusEnums.TRADE_SUCCESS.getCode().equals(alipayStatus)) {
            payStatus = ChannelPayStatus.SUCCESS;
        } else if (AlipayAppTradeStatusEnums.WAIT_BUYER_PAY.getCode().equalsIgnoreCase(alipayStatus)
                || AlipayAppTradeStatusEnums.WAIT_SYS_CONFIRM_PAY.getCode().equalsIgnoreCase(alipayStatus)) {
            payStatus = ChannelPayStatus.PROCESSING;
        } else if (AlipayAppTradeStatusEnums.TRADE_CLOSED.getCode().equalsIgnoreCase(alipayStatus)) {
            payStatus = ChannelPayStatus.CLOSED;
        } else if (AlipayAppTradeStatusEnums.TRADE_REFUSE.getCode().equals(alipayStatus)) {
            payStatus = ChannelPayStatus.REFUSE;
        } else if (AlipayAppTradeStatusEnums.TRADE_REFUSE_DEALING.getCode().equals(alipayStatus)) {
            payStatus = ChannelPayStatus.REFUSEING;
        } else if (AlipayAppTradeStatusEnums.TRADE_CANCEL.getCode().equals(alipayStatus)) {
            payStatus = ChannelPayStatus.CANCEL;
        } else if (AlipayAppTradeStatusEnums.WAIT_SYS_CONFIRM_PAY.getCode().equals(alipayStatus) ||
                AlipayAppTradeStatusEnums.COD_WAIT_BUYER_PAY.getCode().equals(alipayStatus)) {
            payStatus = ChannelPayStatus.PROCESSING;
        } else if (AlipayAppTradeStatusEnums.ZHIFUBAO_CANCEL_FP.getCode().equals(alipayStatus)) {
            payStatus = ChannelPayStatus.CANCEL;
        } else if (AlipayAppTradeStatusEnums.DAEMON_CONFIRM_CLOSE.getCode().equals(alipayStatus) ||
                AlipayAppTradeStatusEnums.DAEMON_CONFIRM_CANCEL_PRE_AUTH.getCode().equals(alipayStatus)) {
            payStatus = ChannelPayStatus.CLOSED;
        } else {
            payStatus = ChannelPayStatus.SUCCESS;
        }
        return payStatus;
    }

    /**
     * 微信订单状态转本地
     * @param wechatStatus
     * @return
     */
    public static ChannelPayStatus wechatConvert(String wechatStatus){
        switch (wechatStatus) {
            case "SUCCESS":
                return ChannelPayStatus.SUCCESS;
            case "USERPAYING":
                return ChannelPayStatus.PROCESSING;
            case "REFUND":
                return ChannelPayStatus.REFUND;
            case "NOTPAY":
                return ChannelPayStatus.NOTPAY;
            case "CLOSED":
                return ChannelPayStatus.CLOSED;
            case "REVOKED":
                return ChannelPayStatus.REVOKED;
            case "PAYERROR":
                return ChannelPayStatus.FAIL;
            default:
                //正常这行应该走不到
                return ChannelPayStatus.PROCESSING;
        }
    }

    /**
     * 通联结果转本地状态
     * @param thirdTradeStatus
     * @return
     */
    public static ChannelPayStatus tonglianConvert(String thirdTradeStatus) {
        if("0000".equals(thirdTradeStatus)){
            //业务结果成功
            return ChannelPayStatus.SUCCESS;
        }else if(StringUtils.isEmpty(thirdTradeStatus) || "2008".equals(thirdTradeStatus) || "2000".equals(thirdTradeStatus)){
            //业务处理中，不需要更新，直接返回处理中
            return ChannelPayStatus.PROCESSING;
        }else{
            //业务结果失败
            return ChannelPayStatus.FAIL;
        }
    }
}
